package Alibaba;

/**
 * @author zhangmin
 * @create 2022-01-27 13:15
 * 43. 字符串相乘
 * 给定两个以字符串形式表示的非负整数 num1 和 num2，返回 num1 和 num2 的乘积，它们的乘积也表示为字符串形式。
 * 从最后一位开始计算，每一位计算结果需要记录进位和当前的乘积位，在下一步计算中需要考虑进位
 * num1[i] 和 num2[j] 的乘积对应的就是 res[i+j] 和 res[i+j+1] 这两个位置。
 */
public class multiply43 {
    public String multiply(String num1, String num2) {
        int n1=num1.length(),n2=num2.length();
        int[] res=new int[n1+n2];
        for (int i = n1-1; i >=0; i--) {
            for (int j = n2-1; j >=0 ; j--) {
                int mul=(num1.charAt(i)-'0')*(num2.charAt(j)-'0');
                //System.out.println("mul="+mul);
                int sum=mul+res[i+j+1];
                res[i+j+1]=sum%10;
                res[i+j]+=sum/10;
            }
        }
        int index=0;
        while (index< res.length&&res[index]==0) index++;
        StringBuffer str=new StringBuffer();
        for (;  index < res.length; index++) {
            str.append(res[index]);
        }
        return str.length()==0?"0":str.toString();
    }

    public static void main(String[] args) {
        String num1="2",num2="3";
        multiply43 obj=new multiply43();
        obj.multiply(num1,num2);
    }
}
